#!/usr/bin/env python
# -*- coding: utf-8 -*-

# Módulos 
import sys, gtk, pygame, utils, objetos
from pygame.locals import *

# Constantes

# Clases
# ---------------------------------------------------------------------
class Personajes(pygame.sprite.Sprite):
    def __init__(self):
        pygame.sprite.Sprite.__init__(self)
        self.image = utils.load_image("images/c1_betopensando.jpg", True)
        self.rect = self.image.get_rect()
        self.rect.centerx = 650*utils.RES
        self.rect.centery = 100*utils.RES

class Telefono(pygame.sprite.Sprite):
    def __init__(self):
        pygame.sprite.Sprite.__init__(self)
        self.image = utils.load_image("images/c1_telefono.jpg", True)
        self.rect = self.image.get_rect()
        self.rect.centerx = 200*utils.RES
        self.rect.centery = 300*utils.RES
        self.sonido = pygame.mixer.Sound("sounds/phone.ogg")

class Palabra(pygame.sprite.Sprite):
    def __init__(self,texto,posx,posy,valor):
        pygame.sprite.Sprite.__init__(self)
        self.text,self.rect = utils.texto_titulo(texto, posx, posy,(50,50,255))
        self.rect.centerx = posx
        self.rect.centery = posy
        self.x_ini = posx
        self.y_ini = posy
        self.valor = valor
        self.drag = False
        self.correcta = False 
        self.sonido_correcto = pygame.mixer.Sound("sounds/click.wav")
        self.sonido_fallo = pygame.mixer.Sound("sounds/fallo.wav")   

class Match:
	def __init__(self,texto,posx,posy,valor,parte):
		self.text,self.rect = utils.texto_titulo(texto, posx, posy,(50,50,255))
		self.posx = posx
		self.posy = posy
		self.ocupado = False
		self.valor = valor
		self.parte = parte

        
class Linea:
	def __init__(self,texto,posx,posy):
		self.text,self.rect = utils.texto_normal(texto, posx,posy)
		 
# identifica si una letra esta siendo arrastrada
def detectar_arrastre(palabras):
	x,y = pygame.mouse.get_pos()
	for item in palabras:
		if(item.rect.collidepoint(pygame.mouse.get_pos()) and item.correcta == False):
			item.drag = True
		
# controla en donde se ha soltado la letra para saber si esta en el lugar correcto			
def soltar(palabras, palabras_match):
	for palabra in palabras:
		if palabra.drag == True:
			palabra.drag = False
			#print("Suelta letra")
			for match in palabras_match:
				# si esta en el lugar correcto fija la letra en cuestion en esa posicion
				if palabra.valor == match.valor and abs(palabra.rect.centerx - match.posx) < 30 and abs(palabra.rect.centery - match.posy) < 30 and match.ocupado == False:
					palabra.rect.centerx = match.posx
					palabra.rect.centery = match.posy
					palabra.correcta = True
					#print("iguales "+letra.valor+"-"+match.valor)
					match.ocupado = True
					palabra.sonido_correcto.play()
					break
			# si no se encuentra en el lugar correcto entonces la letra vuelve a la posicion original		
			if(palabra.correcta == False):
					palabra.rect.centerx = palabra.x_ini
					palabra.rect.centery = palabra.y_ini
					palabra.sonido_fallo.play()
					#print("vuelve a la posicion original")

#mueve las letras si estan siendo arrastradas por el mouse
def actualizar_palabras(palabras):
	for item in palabras:
		if(item.drag == True):
			item.rect.centerx,item.rect.centery = pygame.mouse.get_pos()
				
# verifica si las palabras estan ordenadas			
def ejercicios_completos(palabras_match,parte):
	for item in palabras_match:
		if item.parte == parte and item.ocupado == False:
			return False				
	#print("Palabra ordenada")
	return True	
		 
# ---------------------------------------------------------------------
def dibujar(screen,cursor_picture, clock):
    salir = 0
    background_image = utils.load_image('images/fondo1_2.png')
    btn_adelante = objetos.BotonAdelante()
    btn_atras = objetos.BotonAtras()
    personajes = Personajes()
    telefono = Telefono()
    
    clase1, clase1_rect = utils.texto_clase("Clase 1", 750*utils.RES, 15*utils.RES)
    
    #----------------------------------------------------------------------------------------------------#
           
    titulo, titulo_rect = utils.texto_subtitulo("DESARROLLO SUSTENTABLE", 200*utils.RES, 60*utils.RES)
    titulo_sub, titulo_sub_rect = utils.texto_subtitulo(".....................................", 200*utils.RES, 70*utils.RES)
    linea1,linea1_rect = utils.texto_normal('Beto está totalmente confundido... Los recursos no renovables', 300*utils.RES,110*utils.RES)
    linea2,linea2_rect = utils.texto_normal('se pueden agotar porque no se renuevan. ¿Y ahora resulta', 285*utils.RES,140*utils.RES)
    linea3,linea3_rect = utils.texto_normal('que los renovables también pueden agotarse?', 240*utils.RES,170*utils.RES)
    
    linea4,linea4_rect = utils.texto_subtitulo_azul('Hablando con el científico', 550*utils.RES,230*utils.RES)
    linea5,linea5_rect = utils.texto_subtitulo_azul('....................................', 550*utils.RES,240*utils.RES)
    linea6,linea6_rect = utils.texto_normal('Beto decidió consultar con un especialista.', 550*utils.RES,270*utils.RES)
    linea7,linea7_rect = utils.texto_normal('Como había interferencia en el llamado', 540*utils.RES,300*utils.RES)
    linea8,linea8_rect = utils.texto_normal('algunas palabras se perdieron.', 505*utils.RES,330*utils.RES)
    linea9,linea9_rect = utils.texto_normal('¿Podrías completarlas utilizando las que', 545*utils.RES,360*utils.RES)
    linea10,linea10_rect = utils.texto_normal('aparecen en pantalla?', 475*utils.RES,390*utils.RES)
    
    #variables de la conversacion 
    beto_telefono = utils.load_image('images/c1_betotelefono.jpg', True)
    cientifico = utils.load_image('images/c1_cientifico.jpg', True)
    linea11,linea11_rect = utils.texto_subtitulo_azul('Hablando con el científico', 400*utils.RES,70*utils.RES)
    linea12,linea12_rect = utils.texto_subtitulo_azul('....................................', 400*utils.RES,80*utils.RES)
    
    bloque2 = ( Linea('Hola, señor especialista, podría explicarme: ¿cómo', 420*utils.RES,140*utils.RES),
    Linea('sabemos si los recursos pueden utilizarse o no?', 410*utils.RES,170*utils.RES) 
    )
    bloque3 = ( Linea('¡Hola Beto! Las personas pueden utilizar tanto los recursos no', 300*utils.RES,230*utils.RES),
    Linea('renovables como los ______________ porque los necesitan', 300*utils.RES,260*utils.RES),
    Linea('para vivir. Pero, por ejemplo, en las grandes __________', 290*utils.RES,290*utils.RES),
    Linea('muchas veces estos se sobre-explotan. Es decir: se usan más', 300*utils.RES,320*utils.RES),
    Linea('rápido y en mayor cantidad, sin respetar el _________', 280*utils.RES,350*utils.RES),
    Linea('que estos elementos necesitan para recuperarse', 250*utils.RES,380*utils.RES) )
    
    bloque4 = Linea('¿Me podría dar algún ejemplo?', 380*utils.RES,140*utils.RES)
    bloque5 = ( Linea('Hay un montón de ejemplos. Cuando las fábricas', 320*utils.RES,230*utils.RES),
    Linea('emiten _______, humo, y desechos, el aire y', 305*utils.RES,260*utils.RES),
    Linea('el agua no pueden auto-limpiarse tan', 275*utils.RES,290*utils.RES),
    Linea('rápidamente y se van _________________', 300*utils.RES,320*utils.RES))

    bloque6 = Linea('Esos son recursos renovables que no alcanzan a regenerarse', 420*utils.RES,140*utils.RES)
    bloque7 = ( Linea('Así es. Otro ejemplo es la pesca, especies de peces', 320*utils.RES,230*utils.RES),
    Linea('que pueden ir dismunuyendo o incluso ____________', 340*utils.RES,260*utils.RES))

    bloque8 = Linea('Entonces ¿No hay que pescar?', 340*utils.RES,120*utils.RES)
    bloque9 = ( Linea('Se puede pescar, pero... las personas que estudian el medio', 450*utils.RES,170*utils.RES),
    Linea('ambiente recomiendan el DESARROLLO SUSTENTABLE de los', 445*utils.RES,200*utils.RES),
    Linea('recursos. Eso quiere decir que se pueden usar los recursos', 440*utils.RES,230*utils.RES),
    Linea('pensando que en el ________ también los vamos a necesitar. Entonces, se', 350*utils.RES,260*utils.RES),
    Linea('puede pescar, siempre y cuando, le demos tiempo a los peces para que se', 350*utils.RES,290*utils.RES),
    Linea('______________. Se puede talar ________ para fabricar papel y muebles,', 350*utils.RES,320*utils.RES),
    Linea('si sabemos cuánto tiempo le lleva al bosque ______________.', 300*utils.RES,350*utils.RES),
    Linea('Si no. ¡Nos quedamos sin bosque!', 300*utils.RES,380*utils.RES))
    
    bloque10 = ( Linea('Ahora está muy claro. ¡Gracias, especialista!', 400*utils.RES,420*utils.RES),
    Linea('¡Adiós, Beto!', 350*utils.RES,460*utils.RES))
    
    #--------------------------------------------------------------------------------------------------------#
    
    palabras = ( Palabra("RENOVABLES",200*utils.RES,420*utils.RES,1),
    Palabra("FUTURO",320*utils.RES,420*utils.RES,2),
    Palabra("GASES",410*utils.RES,420*utils.RES,3),
    Palabra("REPRODUZCAN",520*utils.RES,420*utils.RES,4),
    Palabra("ARBOLES",190*utils.RES,450*utils.RES,5),
    Palabra("CONTAMINANDO",330*utils.RES,450*utils.RES,6),
    Palabra("REGENERARSE",500*utils.RES,450*utils.RES,7),
    Palabra("TIEMPO",200*utils.RES,480*utils.RES,8),
    Palabra("CIUDADES",310*utils.RES,480*utils.RES,9),
    Palabra("DESAPARECER",450*utils.RES,480*utils.RES,10) )
    
    palabras_match = ( Match("RENOVABLES",300*utils.RES,260*utils.RES,1,1),
    Match("CIUDADES",470*utils.RES,290*utils.RES,9,1),
    Match("TIEMPO",450*utils.RES,350*utils.RES,8,1),
    Match("GASES",220*utils.RES,260*utils.RES,3,2),
    Match("CONTAMINANDO",380*utils.RES,320*utils.RES,6,2),
    Match("DESAPARECER",500*utils.RES,260*utils.RES,10,3),
    Match("FUTURO",255*utils.RES,260*utils.RES,2,4),
    Match("REPRODUZCAN",125*utils.RES,320*utils.RES,4,4),
    Match("ARBOLES",360*utils.RES,320*utils.RES,5,4),
    Match("REGENERARSE",470*utils.RES,350*utils.RES,7,4)
    )
    
    #-------------------------------------------------------------------------------------------------------
    
    frase_final,frase_final_rect = utils.texto_normal('¡Muy Bien!', 650*utils.RES,50*utils.RES,(255,0,0))
    frase_final2,frase_final2_rect = utils.texto_normal('¡Haz Click para seguir!', 650*utils.RES,80*utils.RES,(255,0,0))
    
    numero_animacion = 0
    frame = 0
    completo1 = False
    completo2 = False
    completo3 = False
    completo4 = False
    
    while salir == 0:
    
    	# Pump GTK messages.
		while gtk.events_pending():
			gtk.main_iteration()
			
		for eventos in pygame.event.get():
			if eventos.type == QUIT:
				sys.exit(0)
			elif eventos.type == pygame.VIDEORESIZE:
			   pygame.display.set_mode(eventos.size, pygame.RESIZABLE)	
			elif eventos.type == MOUSEBUTTONDOWN:
				if btn_adelante.rect.collidepoint(pygame.mouse.get_pos()):
					salir = 11
					btn_adelante.sonido.play()	
				elif btn_atras.rect.collidepoint(pygame.mouse.get_pos()):
					salir = 9
					btn_atras.sonido.play()	
				elif telefono.rect.collidepoint(pygame.mouse.get_pos()):
					numero_animacion = 2
					frame = 0
				if completo1 == True and numero_animacion == 3:
					numero_animacion = 4
				elif completo2 == True and numero_animacion == 5:
					numero_animacion = 6
				elif completo3 == True and numero_animacion == 7:
					numero_animacion = 8			
				detectar_arrastre(palabras)
			elif eventos.type == MOUSEBUTTONUP:
				soltar(palabras,palabras_match)		
				
		#numero_animacion = 9		
		# Realiza la animacion del texto				
		actualizar_palabras(palabras)
		
		completo1 = ejercicios_completos(palabras_match,1)
		completo2 = ejercicios_completos(palabras_match,2)				
		completo3 = ejercicios_completos(palabras_match,3)					
		completo4 = ejercicios_completos(palabras_match,4)							
		#Fondo	
		screen.blit(background_image, (0, 0))
		screen.blit(clase1, clase1_rect)
		#Transicion de animaciones
		if frame > 60 and numero_animacion == 0:
			numero_animacion = 1
			frame = 0
		elif frame > 60 and numero_animacion == 2:
			numero_animacion = 3
			frame = 0
		elif frame > 60 and numero_animacion == 4:
			numero_animacion = 5
			frame = 0
		elif frame > 60 and numero_animacion == 6:
			numero_animacion = 7
			frame = 0	
		elif frame > 60 and numero_animacion == 8:
			numero_animacion = 9
			frame = 0		
			
		#Animacion del texto
		if numero_animacion < 2: 
			screen.blit(personajes.image,personajes.rect)
			screen.blit(titulo, titulo_rect)
			screen.blit(titulo_sub, titulo_sub_rect)
			screen.blit(linea1,linea1_rect)
			screen.blit(linea2,linea2_rect)
			screen.blit(linea3,linea3_rect)
		if numero_animacion >= 2: 
			screen.blit(beto_telefono,(50*utils.RES, 40*utils.RES))
			screen.blit(cientifico,(650*utils.RES, 200*utils.RES))
			screen.blit(linea11,linea11_rect)
			screen.blit(linea12,linea12_rect)
		if numero_animacion == 1: 
			screen.blit(telefono.image,telefono.rect)
			if frame % 70 == 0:
				telefono.sonido.play()	
			screen.blit(linea4,linea4_rect)
			screen.blit(linea5,linea5_rect)
			screen.blit(linea6,linea6_rect)
			screen.blit(linea7,linea7_rect)
			screen.blit(linea8,linea8_rect)
			screen.blit(linea9,linea9_rect)
			screen.blit(linea10,linea10_rect)
		if numero_animacion == 2 or numero_animacion == 3:
			for texto in bloque2:
				screen.blit(texto.text,texto.rect)
				for palabra in palabras_match:
					if palabra.ocupado == True and palabra.parte == 1:
						screen.blit(palabra.text,palabra.rect)		
		if numero_animacion == 3:	
			for texto in bloque3:
				screen.blit(texto.text,texto.rect)	
			if completo1:
				screen.blit(frase_final,frase_final_rect)
				screen.blit(frase_final2,frase_final2_rect)		
		if numero_animacion == 4 or numero_animacion == 5:	
			screen.blit(bloque4.text,bloque4.rect)
			for palabra in palabras_match:
				if palabra.ocupado == True and palabra.parte == 2:
					screen.blit(palabra.text,palabra.rect)		
		if numero_animacion == 5:	
			for texto in bloque5:
				screen.blit(texto.text,texto.rect)
			if completo2:
				screen.blit(frase_final,frase_final_rect)
				screen.blit(frase_final2,frase_final2_rect)			
		if numero_animacion == 6 or numero_animacion == 7:	
			screen.blit(bloque6.text,bloque6.rect)
			for palabra in palabras_match:
				if palabra.ocupado == True and palabra.parte == 3:
					screen.blit(palabra.text,palabra.rect)		
		if numero_animacion == 7:	
			for texto in bloque7:
				screen.blit(texto.text,texto.rect)
			if completo3:
				screen.blit(frase_final,frase_final_rect)
				screen.blit(frase_final2,frase_final2_rect)			
		if numero_animacion == 8 or numero_animacion == 9:	
			screen.blit(bloque6.text,bloque8.rect)
			for palabra in palabras_match:
				if palabra.ocupado == True and palabra.parte == 4:
					screen.blit(palabra.text,palabra.rect)		
		if numero_animacion == 9:	
			for texto in bloque9:
				screen.blit(texto.text,texto.rect)
			if completo4:
				for texto in bloque10:
					screen.blit(texto.text,texto.rect)						
		if numero_animacion == 3 or	numero_animacion == 5 or numero_animacion == 7 or numero_animacion == 9:
			for palabra in palabras:
				if palabra.correcta == False:
					screen.blit(palabra.text,palabra.rect)	
			#for palabra in palabras_match:
				#if palabra.parte == 4:
					#screen.blit(palabra.text,palabra.rect)		
		#imagenes constantes en la pantalla
		screen.blit(btn_adelante.image, btn_adelante.rect)
		screen.blit(btn_atras.image, btn_atras.rect)
		screen.blit(cursor_picture, pygame.mouse.get_pos())
		pygame.display.flip()

		frame += 1
		# Try to stay at 30 FPS
		clock.tick(30)
                	 
    return salir

# This function is called when the game is run directly from the command line:
# ./TestGame.py 
def main():
	
	pygame.init()
	screen = pygame.display.set_mode((int(800*utils.RES), int(520*utils.RES)), pygame.RESIZABLE) #pygame.display.get_surface() #

	# Fake a Sugar cursor for the pyGame canvas area
	pygame.mouse.set_cursor((8,8),(0,0),(0,0,0,0,0,0,0,0),(0,0,0,0,0,0,0,0))
	cursor_picture = pygame.image.load('images/standardcursor.png')
	cursor_picture.convert_alpha() 
	clock = pygame.time.Clock()
	dibujar(screen,cursor_picture,clock)

if __name__ == '__main__':
   main()
